home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Softdisk Magazette Volume 2, No. 01 (1982-09)(Softdisk)(Side A).zip / Softdisk Magazette Volume 2, No. 01 (1982-09)(Softdisk)(Side A).do / SOFTDISK.PROG.bas < prev    next >
BASIC Source File  |  1996-12-24  |  8KB  |  213 lines

  1. 2  REM  IMPROVED SOFTDISK.PROG
  2. 3  REM  BY DAN TOBIAS  JUNE 1982
  3. 4  REM 
  4. 5  TEXT : HOME 
  5. 10  POKE 1013,76: POKE 1014,0: POKE 1015,3: FOR X1 = 768 TO 818: READ Y1: POKE X1,Y1: NEXT 
  6. 20 D$ =  CHR$(4):OP$ = D$ +"OPEN SOFTDISK.TEXT,L47"
  7. 30 RD$ = D$ +"READ SOFTDISK.TEXT,R"
  8. 35 WR$ = D$ +"WRITE SOFTDISK.TEXT,R"
  9. 40 CL$ = D$ +"CLOSE SOFTDISK.TEXT"
  10. 50  DIM L$(30),L(30)
  11. 60  DIM VL$(500),S%(500),C%(500)
  12. 90  PRINT OP$
  13. 100  PRINT RD$;0: INPUT LF: INPUT VN: &  GET DT$
  14. 110  PRINT D$
  15. 120 RN = 1
  16. 130  GOTO 1000
  17. 200  REM NUMBERINPUT
  18. 210  PRINT D$
  19. 220  INVERSE : PRINT "Q=QUIT  H=HARDCOPY  V=VERBAL  OR 1-"T;
  20. 225  NORMAL 
  21. 230  GET I$
  22. 240  IF I$ = "Q"  THEN 9000
  23. 250  IF I$ = "H"  THEN  GOSUB 5000: RETURN 
  24. 260  IF I$ = "V"  THEN  GOSUB 2000: RETURN 
  25. 270 I =  VAL(I$)
  26. 280  IF (I >T)  OR I <1  OR I < > INT(I)  THEN  PRINT "<CTRL-G>";: GOTO 230
  27. 290 RN = RN(I): RETURN 
  28. 400  REM MINPUT
  29. 410  PRINT D$
  30. 420  INVERSE : PRINT "Q=QUIT  H=HARDCOPY  G=GO BACK  M=MORE ";: NORMAL 
  31. 430  GET I$
  32. 440  IF I$ = "Q"  THEN 9000
  33. 450  IF I$ = "H"  THEN  GOSUB 5000: RETURN 
  34. 460  IF I$ = "G"  THEN RN = 1: RETURN 
  35. 470  IF I$ < >"M"  THEN  PRINT "<CTRL-G>";: GOTO 430
  36. 480 RN = RN(1): RETURN 
  37. 500  REM Y/N INPUT
  38. 510  PRINT D$
  39. 520  INVERSE : PRINT "Q=QUIT  H=HARDCOPY  V=VERBAL  OR Y,N ";: NORMAL 
  40. 530  GET I$
  41. 540  IF I$ = "Q"  THEN 9000
  42. 550  IF I$ = "H"  THEN  GOSUB 5000: RETURN 
  43. 560  IF I$ = "V"  THEN  GOSUB 2000: RETURN 
  44. 570  IF I$ = "Y"  THEN RN = RN(1): RETURN 
  45. 580  IF I$ = "N"  THEN RN = RN(2): RETURN 
  46. 590  PRINT "<CTRL-G>";: GOTO 530
  47. 600  REM INPUT
  48. 610  HTAB 1
  49. 620 I$ = ""
  50. 630  GET II$
  51. 640  IF II$ =  CHR$(13)  THEN  RETURN 
  52. 650  IF II$ =  CHR$(8)  AND  LEN(I$) = 0  THEN  PRINT "<CTRL-G>";: GOTO 630
  53. 655  IF II$ =  CHR$(8)  THEN  PRINT II$;: CALL  -868: IF  LEN(I$) = 1  THEN I$ = "": GOTO 630
  54. 660  IF II$ =  CHR$(8)  THEN I$ =  LEFT$(I$, LEN(I$) -1): GOTO 630
  55. 665  IF  LEN(I$) >38  THEN  PRINT "<CTRL-G>";: GOTO 630
  56. 667  IF  ASC(II$) <32  THEN  INVERSE : PRINT  CHR$( ASC(II$) +64);: NORMAL 
  57. 670 I$ = I$ +II$: PRINT II$;: GOTO 630
  58. 700  REM GO STRAIGHT TO V
  59. 705  PRINT D$
  60. 710  INVERSE : PRINT "Q=QUIT  H=HARDCOPY  G=GO BACK  M=MORE ";
  61. 720  NORMAL 
  62. 730  GET I$
  63. 740  IF I$ = "Q"  THEN 999
  64. 750  IF I$ = "H"  THEN  GOSUB 5000: RETURN 
  65. 760  IF I$ = "G"  THEN RN = 1: RETURN 
  66. 770  IF I$ = "M"  THEN  GOSUB 2000:RN = RN(1): RETURN 
  67. 780  PRINT "<CTRL-G>";: GOTO 730
  68. 1000  REM GET PAGE 
  69. 1005 NN = RN
  70. 1010  PRINT RD$;NN
  71. 1020  &  GET T$
  72. 1023  IF T$ < >"D"  THEN 1200
  73. 1026  &  GET T$
  74. 1030  IF T$ = "H"  THEN  HOME : INVERSE : PRINT "SOFTDISK MAGAZETTE - ";DT$;" - FRAME ";RN: NORMAL : PRINT 
  75. 1035  IF T$ = "H"  THEN NL = 0
  76. 1040  &  GET T$
  77. 1050 T =  VAL(T$)
  78. 1060  &  GET T$: PRINT T$
  79. 1065 NL = NL +1:L$(NL) = T$
  80. 1067 L(NL) = T
  81. 1070  IF T >0  THEN  PRINT :T = T -1: GOTO 1070
  82. 1075  PRINT D$
  83. 1080 NN = NN +1: GOTO 1010
  84. 1200  REM  END OF PAGE
  85. 1210  IF T$ < >"R"  THEN  PRINT "<< ERROR IN TEXT FILE >><CTRL-G>": STOP 
  86. 1220  &  GET T1$: INPUT FV: &  GET T$
  87. 1225 T =  -1
  88. 1230  IF T$ = "Y"  THEN  FOR A = 1 TO 2: &  GET A$:RN(A) =  VAL(A$): NEXT : GOSUB 500: GOTO 1300
  89. 1232 T = 1
  90. 1235  IF T$ = "V"  THEN  &  GET A$:RN(1) =  VAL(A$): GOSUB 700: GOTO 1300
  91. 1240 T =  VAL(T$): IF T = 0  THEN  PRINT "<< ERROR IN TEXT FILE >><CTRL-G>": STOP 
  92. 1250  FOR A = 1 TO T: &  GET A$:RN(A) =  VAL(A$)
  93. 1253  IF A$ = "V"  THEN RN(A) =  -999
  94. 1256  NEXT 
  95. 1260  IF T = 1  THEN  GOSUB 400: GOTO 1300
  96. 1270  GOSUB 200
  97. 1300  REM  CONTINUE
  98. 1305  PRINT 
  99. 1310  GOTO 1000
  100. 2000  REM VERBAL
  101. 2010  HOME : PRINT 
  102. 2015 N = 1
  103. 2017 V = FV
  104. 2018  IF V = 0  THEN N = 0: GOTO 2100
  105. 2020  PRINT RD$;V
  106. 2030  INPUT NA: &  GET VL$(N)
  107. 2040 S%(N) = V:C%(N) = 0
  108. 2050  IF NA = 0  THEN 2100
  109. 2060 N = N +1:V = NA: GOTO 2020
  110. 2100  REM  FINISHED READING
  111. 2105  PRINT D$
  112. 2120  VTAB 21: INVERSE : PRINT "ARROWS MOVE CURSOR.  I=INSERT, D=DELETE,C=CHANGE, G=GO BACK, H=HARDCOPY         ";: NORMAL 
  113. 2130  POKE 35,20: HOME : PRINT 
  114. 2135  IF N = 0  THEN A = 0:TA = 1: GOTO 2150
  115. 2140 A = 1:TA = 1:AA = 1: GOSUB 3000
  116. 2150  REM 
  117. 2155  HTAB 40: PRINT "*"; CHR$(8);: GET I$: PRINT " "; CHR$(8);
  118. 2160 OA = A
  119. 2165  IF N = 0  THEN 2250
  120. 2170  IF I$ =  CHR$(8)  THEN A = A -1
  121. 2180  IF I$ =  CHR$(21)  THEN A = A +1
  122. 2190  IF A <1  OR A >N  THEN A = OA: PRINT "<CTRL-G>";: GOTO 2150
  123. 2200  IF (A <TA)  THEN TA = TA -18:AA = TA:A2 = A:A = TA: GOSUB 3000:A = A2: VTAB 2 +(A -TA): GOTO 2150
  124. 2210  IF (A <OA)  THEN  VTAB  PEEK(37): GOTO 2150
  125. 2220  IF (A >OA)  THEN  PRINT : IF  PEEK(37) = 19  THEN TA = A:AA = A: GOSUB 3000: GOTO 2150
  126. 2230  IF (A < >OA)  THEN 2150
  127. 2240  IF I$ = "C"  THEN  GOSUB 2300: GOTO 2150
  128. 2250  IF I$ = "I"  THEN  GOSUB 2500: GOTO 2150
  129. 2255  IF N = 0  THEN 2270
  130. 2260  IF I$ = "D"  THEN  GOSUB 2700: GOTO 2150
  131. 2270  IF I$ = "G"  THEN 2900
  132. 2275  IF I$ = "H"  THEN  GOSUB 2800:A2 = A:A = TA:AA = A: GOSUB 3000:A = A2: VTAB 2 +(A -TA): GOTO 2150
  133. 2280  PRINT "<CTRL-G>";: GOTO 2150
  134. 2300  REM  CHANGE
  135. 2310  HTAB 1: CALL  -868
  136. 2320  GOSUB 600
  137. 2330  IF I$ = ""  THEN  HTAB 1: PRINT VL$(A);: RETURN 
  138. 2340 VL$(A) = I$:C%(A) = 1: RETURN 
  139. 2500  REM  INSERT
  140. 2502  IF N = 0  THEN A = 2: GOTO 2540
  141. 2504  IF N > = 500  THEN  PRINT "<CTRL-G>";: RETURN 
  142. 2505 AA = A +1:A = A +2
  143. 2510  IF A -TA <18  THEN  GOSUB 3000: GOTO 2540
  144. 2520  IF A -TA = 18  THEN  PRINT : GOTO 2540
  145. 2530 TA = A -1: GOSUB 3000
  146. 2540 A = A -1: HTAB 1: VTAB 2 +(A -TA): CALL  -868
  147. 2550  GOSUB 600
  148. 2560  IF I$ = ""  THEN  HTAB 1: CALL  -868: GOSUB 3900: RETURN 
  149. 2570  IF A >N  THEN N = N +1:C%(A) = 1:C%(A -1) = 1:S%(A) = 0:VL$(A) = I$: GOTO 2500
  150. 2580  FOR B = N TO A  STEP  -1:VL$(B +1) = VL$(B):S%(B +1) = S%(B):C%(B +1) = C%(B): NEXT 
  151. 2585 N = N +1
  152. 2590 VL$(A) = I$:S%(A) = 0:C%(A) = 1:C%(A -1) = 1: GOTO 2500
  153. 2700  REM  DELETE
  154. 2702  IF S%(N) = VN  THEN VN = VN -1
  155. 2705  IF N = 1  THEN N = 0: HOME : PRINT : RETURN 
  156. 2710  IF A = N  THEN N = N -1:A = A -1:C%(A) = 1: HTAB 1: CALL  -868: VTAB  PEEK(37): IF (A <TA)  THEN TA = TA -18:A2 = A:A = TA:AA = A: GOSUB 3000:A = A2: VTAB 2 +(A -TA)
  157. 2720  IF A = N  THEN  RETURN 
  158. 2730  FOR B = A TO N -1:VL$(B) = VL$(B +1):S%(B) = S%(B +1):C%(B) = C%(B +1): NEXT 
  159. 2740 N = N -1:C%(A -1) = 1:AA = A: GOSUB 3000: RETURN 
  160. 2800  REM  HARDCOPY
  161. 2805  HOME 
  162. 2807  PRINT 
  163. 2810  PRINT D$"PR#1"
  164. 2815  PRINT : PRINT "SOFTDISK MAGAZETTE - ";DT$;" - PAGE ";RN;" - VERBAL RESPONSE": PRINT 
  165. 2820  FOR B = 1 TO N
  166. 2830  PRINT VL$(B): NEXT B
  167. 2835  PRINT : PRINT D$"PR#0"
  168. 2840  RETURN 
  169. 2900  REM  GO BACK
  170. 2902  PRINT :S%(N +1) = 0
  171. 2905  IF N = 0  THEN 2940
  172. 2907  FOR A = 1 TO N: IF S%(A) = 0  THEN VN = VN +1:S%(A) = VN
  173. 2908  NEXT A
  174. 2910  FOR A = 1 TO N
  175. 2920  IF C%(A) = 1  THEN  PRINT WR$;S%(A): PRINT S%(A +1): PRINT VL$(A): PRINT D$
  176. 2930  NEXT A
  177. 2940  PRINT WR$;NN
  178. 2950  PRINT "R": PRINT T1$: PRINT S%(1): PRINT T$
  179. 2960  IF T$ = "Y"  THEN  PRINT RN(1): PRINT RN(2): GOTO 2990
  180. 2970  IF T$ = "V"  THEN  PRINT RN(1): GOTO 2990
  181. 2980  FOR A = 1 TO T: PRINT RN(A): NEXT 
  182. 2990  PRINT WR$;0: PRINT LF: PRINT VN: PRINT DT$: PRINT D$: PRINT CL$: PRINT OP$: TEXT : HOME : RETURN 
  183. 3000  REM DISPLAYLINES
  184. 3010  VTAB 2 +(A -TA)
  185. 3015  HTAB 1: CALL  -958
  186. 3017 A1 = AA
  187. 3020  IF  PEEK(37) = 19  OR A1 >N  THEN  VTAB 2 +(A -TA): RETURN 
  188. 3030  PRINT VL$(A1):A1 = A1 +1: GOTO 3020
  189. 3900  REM  REPLACE LINES
  190. 3910 A = A -1:AA = A
  191. 3920  IF (A > = TA)  THEN  GOSUB 3000: RETURN 
  192. 3925 A2 = A:TA = TA -18:A = TA:AA = TA
  193. 3927  IF TA <1  THEN TA = 1:A = 1:AA = 1
  194. 3930  GOSUB 3000:A = A2: VTAB 2 +(A -TA): RETURN 
  195. 5000  REM PRINTOUT
  196. 5010  HOME : PRINT : PRINT D$"PR#1"
  197. 5015  PRINT "SOFTDISK MAGAZETTE - "DT$" - FRAME "RN
  198. 5017  PRINT 
  199. 5020  FOR A = 1 TO NL
  200. 5030  PRINT L$(A)
  201. 5033 TT = L(A)
  202. 5036  IF TT >0  THEN  PRINT :TT = TT -1: GOTO 5036
  203. 5038  NEXT 
  204. 5040  PRINT 
  205. 5050  IF T =  -1  THEN  PRINT "Q=QUIT  H=HARDCOPY  V=VERBAL  OR Y,N"
  206. 5060  IF T = 1  THEN  PRINT "Q=QUIT  H=HARDCOPY  G=GO BACK  M=MORE"
  207. 5070  PRINT "Q=QUIT  H=HARDCOPY  V=VERBAL  OR 1-"T
  208. 5080  PRINT D$"PR#0": RETURN 
  209. 9000  REM QUIT
  210. 9005  PRINT 
  211. 9007  PRINT CL$
  212. 9010  HOME : PRINT D$"RUN KICK.IT.OFF"
  213. 15000  DATA 201,190,240,3,76,201,222,32,177,0,32,227,223,32,44,213,232,189,0,2,208,250,134,157,138,32,82,228,160,0,145,131,200,165,113,145,131,200,165,114,145,131,160,2,162,0,165,157,76,226,229